#include "assert.h" 
#include "ciudad.h"
#include <iostream>
#include <string>
#include <random>

int main (void) {
	Ciudad * c = new Ciudad() ; 
	Vehiculo * v ;
/*	std::default_random_engine generador ;
	std::uniform_int_distribution<int> numeros(1,8);
	std::uniform_int_distribution<int> letras(65,72);
	std::uniform_int_distribution<int> direccion(1,4);
	
	for ( size_t i = 0 ; i < 150 ; i++ ) { 
		std::string str ;
		int num = numeros(generador) ; 
		char letra = (char) letras(generador) ; 
		int cardinal = direccion(generador) ; 
		switch (cardinal) { 
			case 1 : str = "N" ; break ;
			case 2 : str = "S" ; break ; 
			case 3 : str = "E" ; break ; 
			case 4 : str = "O" ; break ;
		} 
		std::string nombreSemaforo = std::to_string(num) + " y "  ;
		std::string nombreCalle ; 
		nombreSemaforo.push_back(letra) ;  			
		if ( num%2 ){ 
			nombreCalle = std::to_string(num) ; 
		} else {
			nombreCalle.push_back(letra) ; 
		}
		int picker = i%3 ; 
		std::string destino = "5 y B" ;
		switch (picker) { 
			case 0 : v = new Auto(destino) ; break ;
			case 1 : v = new Ambulancia(destino) ; break ; 
			case 2 : v = new Policia(destino) ; break ; 
		}
		std::cout<< nombreSemaforo << "," << nombreCalle+"_"+str << ":" << v->getNombre() << std::endl ; 
		c->insertarVehiculo(nombreSemaforo,nombreCalle+"_"+str,v) ;
	}
*/ 
		std::string destino = "5 y B" ;
	v = new Auto(destino) ;
		c->insertarVehiculo("1 y A","1_E",v) ;
	v = new Ambulancia(destino) ;
		c->insertarVehiculo("4 y D","4_E",v) ;
	v = new Policia(destino) ;
		c->insertarVehiculo("7 y D","7_O",v) ;

	std::cout << "EMPEZAMOS DIJKSTRA" << std::endl ; 
 
	
	c->dijkstra() ; 
	std::cout << "SALIMOS" << std::endl ;
/**
	for(size_t i = 0 ; i<c->getCaminos()->size() ; i++ ) { 
		std::vector<Semaforo*> * camino = c->getCaminos()->at(i) ; 
		for ( size_t j = 0 ; j<camino->size() ; j++ ) { 
			std::cout << "("+ camino->at(j)->getNombre()+")" << "->" ; 
		} 
		std::cout << "NULL" << std::endl ; 
	} 
*/
	std::cout << std::endl ;


	std::cout << "<<<----------ANTES--------->>>" << std::endl ;
	c->print() ; 
	
	int i = 0 ;
	while ( Vehiculo::getCtdadVehiculos() ) { 
	
	std::cout << "#vehiculos=" << Vehiculo::getCtdadVehiculos() << std::endl ;

	c->mover() ; 

	std::cout << "<<<----------DESPUES--------->>>" << std::endl ;

	c->print() ;	

	if ( i%4 ) { 
		c->dijkstra() ; 
	}	
	
	}
}
		
